package com.spring.demo3.eg2;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.LazyLoader;

/**
 * LazyLoader是cglib用于实现懒加载的callback
 * 当被增强bean的方法初次被调用时，会触发回调，之后每次再进行方法调用都是对LazyLoader第一次返回的bean调用
 * <br>
 * Dispatcher:Dispatcher和LazyLoader作用很相似，区别是用Dispatcher的话每次对增强bean进行方法调用都会触发回调
 *
 * @author vhans
 */
public class UserLazyLoader implements LazyLoader {
    @Override
    public Object loadObject() throws Exception {
        System.out.println("调用MyLazyLoader.loadObject()方法");
        return new User("Vhans");
    }

    public static <T> T createProxy(T target) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(target.getClass());
        enhancer.setCallback(new UserLazyLoader());
        return (T) enhancer.create();
    }
}
